package chap_01_CompletableFuture.step_02_CompletableFuture;

import java.util.concurrent.CompletableFuture;

/**
 * @Description 常用API汇总：对计算结果进行消费
 * @Author shihan
 * @Date 2022/9/4 16:26
 * @Version 1.0
 */
public class CompletableStudy_04_API_03 {

    /**
     * 本讲的主角是：thenAccept
     * 下面列举出来三个，只是为了对比学习
     *
     * @param args
     */
    public static void main(String[] args) {
        // 本来是有返回值的 CF，thenRun 的 Runnable 链式调用处理后，变成无返回值的 CF，所以 join 获取的返回值为空
        System.out.println(CompletableFuture.supplyAsync(() -> "resultA").thenRun(() -> System.out.println("xxx")).join());
        System.out.println("==================");
        // 本来是有返回值的 CF，thenAccept 的 Consumer（有入参、无返参） 链式调用处理后，变成无返回值的 CF，所以 join 获取的返回值为空
        // 入参是上一步的返回值
        System.out.println(CompletableFuture.supplyAsync(() -> "resultA").thenAccept(System.out::println).join());
        System.out.println("==================");
        // 本来是有返回值的 CF，thenApply 的 Function（有入参、返参） 链式调用处理后，变成其他类型返回值的 CF，所以 join 获取到新类型的返回值数据
        System.out.println(CompletableFuture.supplyAsync(() -> "resultA").thenApply(res -> 10.2F).join());
    }

}
